package main
import (
	"fmt"
	"time"
)
//channel 是引用类型，必须在make之后才能使用


func main(){
	go sayHello()
	go test()



	for i:=0;i< 10;i++{
		
		fmt.Println("Hello,main()")
		time.Sleep(time.Second)
	}
}
func sayHello(){
	for i:=0;i< 10;i++{
		time.Sleep(time.Second)
		fmt.Println("Hello,Golang!")
	}
}
func test(){
	defer func(){
		//捕获test抛出的panic
		if err := recover(); err != nil{
			fmt.Println("test() happen the error !:",err)
		}
	}()

	var mymap map[int]string
	mymap[0] = "golang"  //错误的，因为还没make就使用  :  panic: assignment to entry in nil map

	
}


/*
channel使用细节和注意事项3：
	4、goroutine中使用recover，解决协程中出现panic，导致程序崩溃的问题！  如果协程不recover，会导致主程序崩溃
		如果某一个协程出现了问题，我们可以通过defer+recover来解决

*/